#ifndef LINK_NODE_H
#define LINK_NODE_H

#include <atomic>

namespace usnet {
struct FrameBuf;
struct LinkNode {
    LinkNode() : prev_ { this }, next_ { this }
    {
        // nothing to do
    }
    LinkNode(LinkNode&& link);
    LinkNode& operator=(LinkNode&& link);
    
    FrameBuf* GetHead();
    FrameBuf* GetTail();
    void RemoveHead();
    void RemoveTail();
    void RemoveNode(FrameBuf* fb);
    void HeadInsert(FrameBuf* fb);
    void TailInsert(FrameBuf* fb);

    std::atomic_bool accessable_ { true };
    LinkNode* prev_ { this };
    LinkNode* next_ { this };
};
} // end of namespace usnet
#endif